package com.projet.whattowatch.objet;

import java.util.ArrayList;

/**
 * @author anthony
 * 
 */
public class Film implements Comparable<Film>
{
	private String nom;
	private int date;
	private int duree;
	private ArrayList<ArrayList<Object>> listActeur;
	private ArrayList<Humain> listRealisateur;
	public String resume;
	private ArrayList<String> listGenre;
	private ArrayList<Avis> listAvis;
	private String is3DDispo;
	private String imageUrl;

	/**
	 * Constructor for objects of class Film
	 */
	public Film(String monNom, int date, int duree,
			ArrayList<ArrayList<Object>> maListActeur,
			ArrayList<Humain> maListRealisateur, String monResume,
			ArrayList<String> maListGenre, ArrayList<Avis> listAvis, String dispo3d, String imageUrl)
	{
		this.nom = monNom;
		this.date = date;
		this.duree = duree;
		this.listActeur = maListActeur;
		this.listRealisateur = maListRealisateur;
		this.resume = monResume;
		this.listGenre = maListGenre;
		this.listAvis = listAvis;
		this.is3DDispo = dispo3d;
		this.imageUrl = imageUrl;
	}

	/**
	 * Tout les get set de la classe Film
	 */
	public String getNom()
	{
		return this.nom;
	}

	public int getDate()
	{
		return this.date;
	}

	public int getDuree()
	{
		return this.duree;
	}

	public String getResume()
	{
		return this.resume;
	}

	public ArrayList<String> getListGenre()
	{
		return this.listGenre;
	}

	public ArrayList<Avis> getListAvis()
	{
		return this.listAvis;
	}

	public ArrayList<Humain> getListRealisateur()
	{
		return this.listRealisateur;
	}
	
	public ArrayList<ArrayList<Object>> getListActeur() 
	{
		return this.listActeur;
	}
	
	public void setNom(String monNom)
	{
		this.nom = monNom;
	}

	public void setDate(int date)
	{
		this.date = date;
	}

	public void setDuree(int duree)
	{
		this.duree = duree;
	}

	public void setResume(String monResume)
	{
		this.resume = monResume;
	}

	public void setListGenre(ArrayList<String> maListGenre)
	{
		this.listGenre = maListGenre;
	}

	public void setlistAvis(ArrayList<Avis> malistAvis)
	{
		this.listAvis = malistAvis;
	}
	
	public String getImageUrl()
	{
		return imageUrl;
	}

	public void setImageUrl(String imageUrl)
	{
		this.imageUrl = imageUrl;
	}


	/**
	 * Add the realisateur specified in the parameter, at the end of the
	 * listRealisateur
	 */
	public void addRealisateur(Humain monRealisateur)
	{
		this.listRealisateur.add(monRealisateur);
	}
	
	public Humain getRealisateur(int index)
	{
		return listRealisateur.get(index);
	}
	/**
	 * return true if he removed succefully the Element in parameter, false
	 * otherwise
	 */
	public boolean removeRealisateur(Humain monRealisateur)
	{
		return true; // a compléter
	}

	/**
	 * Add the acteur specified in the parameter, at the end of the listActeur
	 */
	public void addActeur(Humain monActeur, String role)
	{
		ArrayList<Object> maListe = new ArrayList<Object>();
		maListe.add(monActeur);
		maListe.add(role);
		
		this.listActeur.add(maListe);
	}

	/**
	 * Add the avis specified in the parameter, at the end of the listAvis
	 */
	public void addAvis(Avis monAvis)
	{
		this.listAvis.add(monAvis);
	}

	/**
	 * return true if he removed succefully the Element in parameter, false
	 * otherwise
	 */
	public boolean removeAvis(Avis monAvis)
	{
		return true; // a compléter
	}

	@Override
	public int compareTo(Film monFilm)
	{
		if (this.nom.compareTo(monFilm.nom) == 0
				&& this.date == monFilm.date
				&& this.listRealisateur.size() == monFilm.listRealisateur.size())
		{
			for (int i = 0; i < this.listRealisateur.size(); i++)
			{
				if (this.listRealisateur.get(i).compareTo(monFilm.listRealisateur.get(i)) != 0)
				{
					return -1;
				}
			}
			return 0;

		}
		return monFilm.nom.compareTo(this.nom);
	}

	public String getIs3DDispo()
	{
		return is3DDispo;
	}

	public void setIs3DDispo(String is3dDispo)
	{
		is3DDispo = is3dDispo;
	}
}
